package com.zsj.juc.lock;

/**
 * @author zsj
 * @version 1.0
 * @date 2024/4/19 19:47
 * @description
 *
 * 1.为什么所有对象都可以是一个锁？
 *  答:在java的底层是使用了cpp的ObjectMonitor
 *      每一个java对象都会有一个ObjectMonitor
 *      每一个被锁住的对象都会和Monitor关联起来
 *      ObjectMonitor有一个owner属性 代表对象归属与哪个线程
 */
public class LockSyncDemo {

   /* Object object = new Object();

    public void m1() {
        // synchronized 底层使用 monitorenter 和 monitorexit 来进行锁获取和退出
        // 一般是 monitorenter 和两个 monitorexit
        synchronized (object) {
            //同步代码块
            System.out.println("hello synchronized m1");
            throw new RuntimeException("HHH");
        }
    }*/

    //javap -v
    //ACC_SYNCHRONIZED
    public synchronized void m2() {
        System.out.println("hello synchronized m2");
    }

    //ACC_STATIC,ACC_SYNCHRONIZED
    public static synchronized void m3() {
        System.out.println("hello synchronized m3");
    }

    public static void main(String[] args) {

    }
}
